package IO流;

import org.junit.Test;

import java.io.*;

/*
    数据流
         为了方便地操作Java语言的基本数据类型和String的数据,可以使用数据流
         数据流有两个类:(用于读取和写出基本数据类型、String类的数据）
             DataInputStream 和 DataOutputStream
             分别"套接"在 InputStream和 OutputStream子类的流上
         DataInputStream中的方法
            boolean readBoolean()   byte readByte()
            char readChar()         float readFloat()
            double readDouble()     short readShort()
            long readLong()         int readInt()
            String readUTF()        void readFully(byte[] b)
         DataOutputStream中的方法
             将上述的方法的read改为相应的write即可
 */
public class IO07 {

    //将内存中的字符串、基本数据类型的变量写出到文件中  --> 写出的数据需要使用DataInputStream读入,因为带了数据格式,不是直接使用记事本打开的
    @Test
    public void test1(){
        DataOutputStream dataOutputStream = null;
        try {
            dataOutputStream = new DataOutputStream(new FileOutputStream(new File("E:\\FileTest\\type.txt")));

            //写出字符串
            dataOutputStream.writeUTF("胡明聪");
            dataOutputStream.writeInt(25);
            dataOutputStream.writeBoolean(true);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(dataOutputStream != null){
                try {
                    dataOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //从文件中读取带类型的数据,保存在变量中  --> 读取的顺序需要保证和写入的顺序一致
    @Test
    public void test2(){
        DataInputStream dataInputStream = null;
        try {
            dataInputStream = new DataInputStream(new FileInputStream(new File("E:\\FileTest\\type.txt")));

            String name = dataInputStream.readUTF();
            int age = dataInputStream.readInt();
            boolean result = dataInputStream.readBoolean();

            System.out.println(name + ":" + age + ":" + result);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(dataInputStream != null){
                try {
                    dataInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
